package com.simple.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.simple.system.domain.dto.ListSysUserDto;
import com.simple.system.domain.entity.SysUser;
import com.simple.system.domain.vo.SysListUserSelectVo;
import com.simple.system.domain.vo.SysListUserVo;
import com.simple.system.domain.vo.SysUserDetailsVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * @Description 用户表(SysUser)表数据库访问层
 * @Author xiaoke
 * @Date 2024/8/10 18:00
 * @Version 1.0
 */
public interface SysUserMapper extends BaseMapper<SysUser> {
    /**
     * 根据用户Id获取权限集合
     *
     * @param userId 用户Id
     * @return 权限集合
     */
    List<String> getUserPerms(Long userId);

    /**
     * 分页获取用户集合
     *
     * @param dto 请求参数
     * @return List<SysListUserVo>
     */
    List<SysListUserVo> listUser(ListSysUserDto dto);

    /**
     * 根据Id获取用户集合
     *
     * @param userIds 用户Id集合
     * @return List<SysListUserVo>
     */
    List<SysListUserVo> listByIds(Set<Long> userIds);

    /**
     * 获取所有用户数据
     *
     * @return List<SysListUserVo>
     */
    List<SysListUserVo> listAll();

    /**
     * 分页获取用户集合-总数
     *
     * @param dto List<SysListUserVo>
     * @return Long
     */
    Long listUserTotal(ListSysUserDto dto);

    /**
     * 根据Id获取用户详情
     *
     * @param userId 用户Id
     * @return SysUserDetailsVo
     */
    SysUserDetailsVo getUserDetails(Long userId);

    /**
     * 根据手机号码获取用户详情
     *
     * @param phone 手机号码
     * @return SysUserDetailsVo
     */
    SysUserDetailsVo getUserPhoneDetails(String phone);

    /**
     * 根据用户名获取用户（包括已经在回收站的）
     *
     * @param username 用户名
     * @return SysUser
     */
    SysUser existUserName(String username);

    /**
     * 根据手机号码获取用户（包括已经在回收站的）
     *
     * @param phone 手机号码
     * @return Integer
     */
    Integer existUserPhone(String phone);

    /**
     * 删除某个用户的所有角色
     *
     * @param id 用户Id
     */
    void deleteByIdRole(Long id);

    /**
     * 批量新增用户角色
     *
     * @param ids    角色ids
     * @param userId 用户Id
     */
    void insertUserRole(
            @Param("ids") Set<Long> ids,
            @Param("userId") Long userId
    );

    /**
     * 根据用户名获取用户详情
     *
     * @param username 用户名
     * @return SysUserDetailsVo
     */
    SysUserDetailsVo getUserNameDetails(String username);

    /**
     * 获取用户下拉列表
     *
     * @return List<SysListUserSelectVo>
     */
    List<SysListUserSelectVo> listSelect();

    /**
     * 根据角色Id获取角色使用数量
     *
     * @param id 用户Id
     * @return Integer
     */
    Integer checkRoleUse(Long id);
}

